package de.mnit.basis.daten.konstant.position;

import de.mnit.basis.daten.konstant.position.POSITION;
import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.konstant.position.POSITION_V;
import de.mnit.basis.fehler.Fehler;

/**
 * @author Michael Nitsche
 * 09.03.2009	Erstellt
 *
 * Kleine Hilfen für den Umgang mit POSITION
 */
public class PositionsHilfe {

	public static boolean istLinks(POSITION p) {
		return p==POSITION.LINKS || p==POSITION.LINKS_OBEN || p==POSITION.LINKS_UNTEN;
	}

	public static boolean istRechts(POSITION p) {
		return p==POSITION.RECHTS || p==POSITION.RECHTS_OBEN || p==POSITION.RECHTS_UNTEN;
	}

	public static boolean istOben(POSITION p) {
		return p==POSITION.OBEN || p==POSITION.LINKS_OBEN || p==POSITION.RECHTS_OBEN;
	}

	public static boolean istUnten(POSITION p) {
		return p==POSITION.UNTEN || p==POSITION.LINKS_UNTEN || p==POSITION.RECHTS_UNTEN;
	}

	public static boolean istHMitte(POSITION p) {
		return p==POSITION.OBEN || p==POSITION.MITTE || p==POSITION.UNTEN;
	}

	public static boolean istVMitte(POSITION p) {
		return p==POSITION.LINKS || p==POSITION.MITTE || p==POSITION.RECHTS;
	}


	public static <T> T auswahlH(POSITION_H ph, T links, T mitte, T rechts) {
		if(ph==POSITION_H.LINKS)
			return links;
		if(ph==POSITION_H.MITTE)
			return mitte;
		if(ph==POSITION_H.RECHTS)
			return rechts;
		throw Fehler.sonstige.da_Unmoeglich(ph);
	}

	public static <T> T auswahlV(POSITION_V pv, T oben, T mitte, T unten) {
		if(pv==POSITION_V.OBEN)
			return oben;
		if(pv==POSITION_V.MITTE)
			return mitte;
		if(pv==POSITION_V.UNTEN)
			return unten;
		throw Fehler.sonstige.da_Unmoeglich(pv);
	}

	public static POSITION_H gibHorizontal(POSITION p) {
		if(istLinks(p))
			return POSITION_H.LINKS;
		if(istHMitte(p))
			return POSITION_H.MITTE;
		if(istRechts(p))
			return POSITION_H.RECHTS;
		return null;
	}

	public static POSITION_V gibVertikal(POSITION p) {
		if(istOben(p))
			return POSITION_V.OBEN;
		if(istVMitte(p))
			return POSITION_V.MITTE;
		if(istUnten(p))
			return POSITION_V.UNTEN;
		return null;
	}

}
